home *** CD-ROM | disk | FTP | other *** search
- /* cvmotd.c
- *************************************************************************/
-
- #include <stdio.h>
- #include <time.h>
- #include <filehdr.h>
- #include <ldfcn.h>
- #include "cvmisc.h"
-
- #define MLEN 500
-
- extern long time();
- extern char *crypt();
- extern char *malloc();
- extern void free();
- extern char *word1;
-
- static char msg[MLEN] = "\nUNIX PC Crystal version 1.7\n";
- static char salt[2] = '\0\0'; /* To get this in the .data section */
- static char password[14] = '\0';
- static char nums[65] = /* remember the terminating null */
- "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
- void
- motd() {
- (void) fputs(msg, stdout);
- }
-
- static void
- newmotd() {
- register char *m, *line;
- #define lim 70
- printf("\nLimit lines to %d bytes. End with a null line.\n",lim);
- m = msg;
- line = malloc(lim+2);
- do {
- fgets(line,lim+2,stdin);
- if (strlen(line) == lim+1 && *(line+lim) != '\n') {
- while (getchar() != '\n') ;
- puts("\nLine too long, retype:");
- } else {
- if (*line == '\n') break;
- strcpy(m,line);
- m += strlen(line);
- *m = '\0';
- if (m - msg + 71 > MLEN) {
- puts("\nNot enough room for another line. Ending here.\n");
- *line = '\n';
- }
- }
- } while (*line != '\n');
- free(line);
- }
-
- static int
- wizard() {
- auto long now;
- auto struct tm *local;
-
- if (!yes(227,0,228)) return FALSE;
- if (password[0] != '\0') {
- puts("\nProve it! Say the magic word!\n");
- getin();
- if (strcmp(crypt(word1,salt),password)) {
- puts("\nFoo, you are nothing but a charlatan!\n");
- return FALSE;
- }
- }
- return TRUE;
- }
-
- void
- maint(argv) char *argv;
- {
- auto long now;
-
- if (!wizard()) return;
- blklin = FALSE;
- puts("\nNew magic word (null to leave it unchanged):");
- getin();
- now = time((long *)0);
- *salt = nums[(now/64)%64];
- *(salt+1) = nums[now%64];
- strcpy(password,crypt(word1,salt));
-
- if (yes(229,0,0)) newmotd();
-
- puts("Okay. Now being saved.\n");
-
-
-
- return;
- }
-